Application interface to a media server and a method of implementing the same

ABSTRACT

According to the present invention, a media manager is provided which incorporates an application program interface (API) for converting high-level generic commands into device-level commands for output to a media device. The inventive media manager includes a high-level command processor which decodes the high-level generic commands and device-specific code mapping modules which convert the high-level generic commands decoded by the high-level command processor into device-level commands. Each of the device-level commands is output from one of the device-specific code-mapping modules to a corresponding one of the media devices.  
     The present invention also encompasses a method of implementing an application program interface (API) for media devices. The method includes receiving high-level generic commands from a computer application, converting the high-level generic commands into device-level commands, and outputting each of the device-level commands to one of the media devices.  
     The present invention also encompasses a computer program product including a computer-readable medium. The computer program product includes means for decoding high-level generic commands, means for converting the high-level generic commands into device-level commands, and means for outputting each of the device-level commands to a corresponding one of the media devices.  
     The present invention further encompasses a common application program interface (API) which converts high-level generic commands received from a computer application into device-level commands which are output to a plurality of media devices including media servers which stores media objects. The common API includes a plurality of individual APIs which each perform a specific function.

BACKGROUND OF THE INVENTION

[0001] 1. Field of the Invention

[0002] The present invention relates to an application interface, andmore particularly to an application interface to a media server and amethod of implementing the same.

[0003] 2. Description of the Related Art

[0004] Conventional multimedia data storage systems are often employedto retain large amounts of multimedia data which are made available formultimedia applications. These conventional multimedia data storagesystems may also incorporate a digital library, such as that which isdescribed in U.S. Pat. No. 5,649,185 to Antognini et al. A problem thatarises with conventional multimedia data storage systems stems from thefact that they often employ multiple media servers which deliverspecific types of data to a client media output station such as a clientviewer including a display. However, because each media server supportsonly its own device-level commands, it is difficult for applicationsrunning within the conventional multimedia data storage system tointeract with multiple media servers. Accordingly, each applicationcommunicating with a particular media server must take into account theunique characteristics of that media server. However, such a scheme canbecome burdensome when there are numerous media servers. Moreover, sucha scheme requires that applications be continuously updated when newmedia servers are incorporated into the multimedia data storage system.

SUMMARY OF THE INVENTION

[0005] It is an object of the present invention to provide a robustmanagement scheme which provides a common interface to media servers.

[0006] It is another object of the present invention to provide a commoninterface to media servers which conceals the media server specificdevice commands from applications which interact with the media serversincluded within the system.

[0007] To achieve the above-mentioned objectives of the presentinvention, a media manager is provided which incorporates an applicationprogram interface (API) for converting high-level generic commands intodevice level commands for output to a plurality of media devices. Theinventive media manager includes a high-level command processor whichdecodes the high-level generic commands, and a plurality of devicespecific code mapping modules which convert the high-level genericcommands decoded by the high-level command processor into device-levelcommands. Each of the device-level commands is output from one of theplurality of device specific code mapping modules to a corresponding oneof the plurality of media devices.

[0008] The present invention also encompasses a method of implementingan application program interface (API) for a plurality of media devices.The method includes receiving a plurality of high-level generic commandsfrom a computer application, converting the plurality of high-levelgeneric commands into device-level commands, and outputting each of thedevice-level commands to one of the plurality of media devices.

[0009] The present invention also encompasses a computer program productincluding a computer-readable medium. The computer program productincludes means for decoding a high-level generic command, means forconverting the high-level generic command into one or more device levelcommand, and means for outputting the converted device level commands toa corresponding one of the plurality of media devices.

[0010] The present invention further encompasses a common applicationprogram interface (API) which converts a high-level generic commandreceived from a computer application into one or more device-levelcommands which are output to a plurality of media devices includingmedia servers which store media objects. The common API includes aplurality of individual APIs which each perform a specific function.

[0011] According to one aspect of the invention, the plurality ofindividual APIs comprise first and second groups of individual APIs. Thefirst group of the individual APIs corresponds to a first group ofmember functions associated with a class defining objects whichrepresent media servers. The second group of the individual APIscorresponds to a second group of member functions associated with aclass defining objects which represent a logical description of aphysical format of media objects.

BRIEF DESCRIPTION OF THE DRAWINGS

[0012] The above objects and advantages of the present invention willbecome more apparent by describing in detail preferred embodimentsthereof with reference to the attached drawings in which:

[0013]FIG. 1 shows a media manager which incorporates the commonapplication program interface (API) of the present invention.

[0014]FIG. 2 shows a flow chart diagram related to the operation of theinventive media manager.

[0015]FIG. 3 shows a multimedia data storage system incorporating theinventive media manager.

[0016]FIG. 4 shows the elements of the multimedia data storage systemshown in FIG. 3.

DETAILED DESCRIPTION OF THE INVENTION

[0017] The present invention is directed to a media manager, which ispreferably implemented in a multimedia data storage system, thatprovides a common application program interface to media serversincluded within the system. The media manager incorporates a managementscheme which facilitates communication between applications runningwithin the multimedia data storage system and the media device(s).

[0018]FIG. 1 depicts a media manager 5 which receives high-levelcommands from a requesting application 8. The media manager 5 convertsthe high-level commands into device specific commands which are outputto first through N-TH media devices 25, which may be a media archive ora media server for handling specific types of media data such as videoor audio data. Using the media manager 5, the requesting application 8can request that a specific function be performed by the media devices25 without having to take into account the idiosyncracies of those mediadevices 25. In addition, the media manager 5 also shields the requestingapplication 8 from having to account for internal changes to the mediadevices 25.

[0019] The media manager 5 includes a high-level command processor 10which receives the high-level commands from the requesting application 8and identifies whether a command corresponds to a particular type ofmedia server which the media manager 5 supports. If the high-levelcommand processor 10 determines that the command issued by therequesting application 8 corresponds to a media device 25 supported bythe media manager 5, the processor 10 passes the request to adevice-specific code-mapping module 15 which handles the high-levelcommands destined for that media device 25.

[0020] The device specific code mapping module 15 will map eachhigh-level command into a device-level command for the module'scorresponding media device 25 and transfer the device-level command tothe media device 25 via a device interface 20 which includes multipledevice level interfaces 22. Alternatively, the device-specificcode-mapping module 15 will convert each high-level command into aseries of actions, which may correspond to at least one of theabove-mentioned high-level commands. These actions are then convertedinto device-level commands by the device-specific code-mapping module 15for the corresponding media device 25.

[0021] The media manager 5 may include multiple device-specificcode-mapping modules 15 in order to support more than one type of mediadevice 25. Accordingly, the media manager 5 includes first through N-THdevice-specific code-mapping modules 15 in order to support the firstthrough N-TH media devices 25.

[0022] The media manager 5 preferably is implemented with the commonapplication program interface (API) of the present invention. However,the high-level command processor 10 actually supports a number ofindividual APIs which together constitute the common API of the presentinvention. The media manger 5 may be implemented in software which isstored in machine readable from on, for example, a computer-readabledisk.

[0023] The individual APIs correspond to member functions of at leasttwo classes. The first class, SERVER, defines objects which representthe media servers 130 shown in FIG. 3. However, the SERVER class may bederived from a third class, MEDIA_DEVICE, in order to accommodate bothmedia servers and media archives. Thus, a fourth class, ARCHIVE, may beprovided which defines objects that represent the media archives 140.However, discussion of the ARCHIVE class is omitted because the memberfunctions which make up the class are similar to those provided in theSERVER class. A discussion of a media archive can be found in U.S.Application, entitled “A MULTIMEDIA DATA STORAGE SYSTEM INCLUDING AMEDIA SERVER AND MEDIA ARCHIVE AND A METHOD OF MANAGING THE MEDIA SERVERAS A CACHE DEVICE FOR THE MEDIA ARCHIVE”, which is incorporated hereinby reference and filed concurrently with the present application.

[0024] The second class, CONTENT, defines objects which represent alogical description of the physical format of an object or part thereof.By way of example, objects with the same format may share a CONTENTclass. The requesting application can interact with any of the mediadevices 25 via the member functions of the CONTENT class in order toacquire information about objects stored within those media devices 25.

[0025] The above-mentioned member functions are described in greaterdetail in the attached APPENDIX. The individual APIs which incorporatethose member functions are described in detail below.

[0026] Server Application Program Interfaces

[0027] A CLOSE API is provided in order to close an open media object.In addition, the CLOSE API destroys an instance of the CONTENT class.

[0028] A CLOSE_SESSION API is provided in order to close an opensession. All resources allocated to the session will be released withthe use of the CLOSE_SESSION API.

[0029] A COPY_MEDIA API is provided to copy a media object from oneserver to one or more other servers.

[0030] A DELETE API is provided in order to remove a media object fromthe server subsystem.

[0031] An EVENT_HANDLER API is provided to conditionally receive controlfor asynchronous events. An event mask, set with a REGISTER_CALL_BACKAPI, allows the specification of events to be passed to theEVENT_HANDLER API.

[0032] An EVENT_MASK API is provided to return the current event mask.

[0033] A GET_META_DATA API is provided to build and return a meta datafile.

[0034] A GET_MEDIA_STATUS API is provided to obtain the status of amedia object.

[0035] An INIT_SERVER API is provided to initialize a media managerclient library. However, the INIT_SERVER API must be the first API thatthe requesting application calls before requesting another media managerservice.

[0036] A LIST_MEDIA_GROUPS API is provided to obtain a list ofconfigured media group names.

[0037] A LIST_MEDIA_NAMES API is provided to obtain a list of names ofmedia objects associated with a particular media group of media objects.

[0038] An OPEN API is provided to return an instance of the CONTENTclass that is used in subsequent calls to read or write data from or toa media object.

[0039] An OPEN_SESSION API is provided to open a session from theapplication to the video server subsystem.

[0040] A REGISTER_CALL_BACK API is provided to register theEVENT_HANDLER API with the Media Manager library. Once registered, theapplication may receive asynchronous event notification from the mediadevice when necessary.

[0041] A C_SERVER API is provided as a constructor to create an instanceof the SERVER class for a specific media server type.

[0042] A D_SERVER API is provided as a default destructor to destroy aninstance of the SERVER class for a specific media server type.

[0043] An UN_REGISTER_CALL_BACK API is used to un-register theapplication event handler. When the event handler is unregistered, theapplication will not receive asynchronous event notifications.

[0044] Content Application Program Interfaces

[0045] A DESTAGE API is provided to destage (i.e. transfer) a mediaobject from a media server to a media archive.

[0046] A GET_MEDIA_ATTRIBUTE API is provided to obtain the mediaattributes of a media object.

[0047] A GET_MEDIA_STATUS API is provided to obtain the status of amedia object.

[0048] A LOAD API is provided to copy an existing media object to amedia device. The media object must be open in write mode. The LOAD APIis asynchronous in nature (i.e. it returns after initiating the loadoperation). The progress of the load function can be determined bycalling the GET_MEDIA_STATUS API. In addition, an invocation of the LOADAPI may be cancelled by using the CLOSE API.

[0049] A READ API is provided to read data of the media object. Eachsuccessive use of the READ API reads a sequential number of bytes from acurrent position within the media object. The media object must be opento invoke the READ API.

[0050] A RETRIEVE API is provided to retrieve a media object from amedia server. The RETRIEVE API is used in conjunction with theGET_META_DATA API.

[0051] A SEEK API is provided to set the current byte position withinthe media object. However, the SEEK API can only be used in conjunctionwith the READ API. Therefore, it cannot be used in conjunction with theWRITE API described below. In addition, the media object must be open inread mode.

[0052] A SET_MEDIA_ATTRIBUTES API is provided to set the mediaattributes of a media object. However, to invoke theSET_MEDIA_ATTRIBUTES API, the media object must be opened in write mode.

[0053] A WRITE API is used to write data to the media object. Eachsuccessive use of the WRITE API writes a sequential number of bytes tothe media object. However, the media object must be open to use theWRITE API.

[0054] Depending on the type of media device employed, some of theindividual APIs described above may need to be converted into a numberof actions which may include the use of some of the other individualAPIs mentioned above. By way of example, the LOAD API may be convertedinto a group of actions which require the use of the OPEN API, theCOPY_MEDIA API, the SET_MEDIA_ATTRIBUTE API and the CLOSE API. The groupof actions would then be converted into corresponding device levelcommands corresponding to a particular media device 25. Depending on theparticular hardware implementation of the media device 25, these devicelevel commands may correspond, one-to-one, to the individual APIsmentioned above in connection with the group of actions. Accordingly,device level commands associated with the LOAD API may include an OPENcommand, a COPY command, at least one SET_ATTRIBUTES command and a CLOSEcommand which correspond to the individual APIs mentioned above.

[0055] The operation of the media manager 5 will now be discussed inconnection with FIG. 2. In step 50, a high-level command is received bythe media manager 5 from the requesting application 8 along with atarget media device. Thereafter, in step 55, the video server type isdetermined by the high-level command processor 10 of the media manager 5based on the information provided by the requesting application 8.Subsequently, in step 60, the request for the specific machine type isvalidated by the high-level command processor 10.

[0056] In step 60, the high-level commands are decoded and broken downinto specific actions by the high-level command processor 10. In step70, the specific actions are executed. Thereafter, in step 75, thedevice-level commands can be generated from the specific actions by oneof the device-specific code-mapping modules 15. Then, in step 80, thedevice-level commands are output via the device interface 20 to acorresponding media device 25.

[0057] An exemplary multimedia data storage system which incorporatesthe inventive media manager shown in FIG. 1 is described below withreference to FIGS. 3 and 4 in which the common API of the presentinvention is used in a digital library environment. The multimedia datastorage system includes a library client 100, a client media outputstation 110, a digital library 120, media servers 130 and a mediaarchive 140 which are implemented in a computer based system. Therelationship between the client 100 and the digital library 120 isexplained in greater detail below with reference to FIG. 4 which alsoshows the internal elements of the digital library 120. The internalstructure of the digital library 120 is further described in U.S. Pat.No. 5,649,185, as noted above.

[0058] As shown in FIG. 4, the digital library 120 includes a libraryserver 210 and at least one media object server 220 which interact withthe library client 100. In addition, a communications isolator isprovided in the digital library which allows the library server 210, themedia object server 220 and the library client 100 to communicate withone another without concern for complex communications protocols. Thelibrary server 210, the media object server 220 and the library client100 are connected by a communications network, such as a local areanetwork (LAN) or a wide area network (WAN).

[0059] Although the media object server 220 and the client 100 outputcommands to the media server 130 generated by applications running onthose platforms, those commands must be converted to device-levelcommands in order to control the particular media server 130 receivingthem. Accordingly, the commands are transferred to the media server 130via a common API which is incorporated in the media manager 5. Althoughthe media manager 5 is shown in FIG. 4 as being included in the mediaobject server 220, the media manager 5 may be included in the mediaservers 130.

[0060] As noted above, the common application program interface allowsthe media object server 220 to interact with media servers 130 havingdifferent operational characteristics. The interface achieves thisobjective by translating the generic instructions or commands generatedby applications running on the media object server 220 or client 100into specific actions that are mapped to device-level commands which areoutput to a particular media server 130. Thus, the common applicationprogram interface ensures that applications need not account for theidiosyncrasies of a particular media server 130 in order to generatecommands for that media server 130.

[0061] In addition, as noted above, applications can interact with eachof the media servers 130 via the member functions of the CONTENT classin order to acquire information about objects stored within those mediaservers 130.

[0062] The above-mentioned individual APIs will usually be used inconjunction with a request, which is sent by the library client 100 tothe library server 210, to store, retrieve, and update media objects.The storage, retrieval and updating of media objects within themultimedia data storage system is described in greater detail below.

[0063] When a request to retrieve or update a particular media object isgenerated by the library client 100, the library server 210 determineswhether the media object is located within the multimedia data storagesystem by searching an index of media objects stored within the system.

[0064] Once the library server 210 determines that the media object isstored within the multimedia data storage system, it passes the requestto that media object server 220 which retains control over the physicallocation of the media object. The media object may be stored in themedia object server 220 itself, or in the media servers 130 or the mediaarchive 140 associated with the media object server 220. Thereafter, thelibrary server 210 may update the media object indexes and descriptiveinformation stored in the library catalog 212 to which the libraryserver 220 is connected to reflect the request.

[0065] After receiving the request to retrieve or update the mediaobject, the media object server 220 identifies the specific type ofmedia object (i.e. audio or video based file) based on an identifierincluded in the request. Thereafter, the object server 220 will identifywhether the media object is located locally within the object store 222or at a remote location within the media archive 140 or one of the mediaservers 130.

[0066] If the media object server 220 determines that the media objectis located in the media archive 140, then depending on the type of themedia object, the media object server 220 will output a command via themedia manager 5 to the media archive 140 which instructs the mediaarchive 140 to transfer the media object to the appropriate media server130.

[0067] Thereafter, the media server 130 receiving the media object willoutput the same to the client media output station 110 upon receipt of acommand to do so from the media object server 220 via the media manager5. By way of example, the client media output station 110 may be a videodisplay such as a television, broadcast monitor or a computer monitorincluding a CRT tube or flat panel display.

[0068] In an alternative scheme, once the media object is stored in themedia server 130, the media object server 220 passes control informationconcerning the media object to the client 100, which then commands themedia server 130 via the media manager 5 to output the media object tothe client media output station 110. By way of example, the media objectmay be output as an asynchronous transfer mode (ATM) based video stream.In addition, the client media output station 110 may be separate from,or included within the client 100.

[0069] If the client 100 requests that a media object be stored orloaded into the multimedia data storage system, then the library server210 catalogs indexing information concerning the media object.Subsequently, the library server 210 will request that the object server220 store control information corresponding to the media object.Thereafter, the media object server 220 issues a command via the mediamanger 5 to the media server 130. In response to the command, the mediaserver 130 will load the media object into itself from the client 100.The client 100 will then transfer the media object to the media server130 completing the loading process.

[0070] Although the above-mentioned multimedia data storage system wasdescribed in connection with a digital library, the media managementscheme of the present invention may be employed in a multimedia datastorage system which is configured differently. In addition, othermodifications and variations to the inventive media management schemewill be apparent to those skilled in the art from the foregoingdisclosure and teachings. Thus, while only certain embodiments of theinvention have been specifically described herein, it will be apparentthat numerous modifications may be made thereto without departing fromthe spirit and scope of the invention.

[0071] Server Class Member Functions

[0072] CLOSE

[0073] Closes an open media object and destroys a CONTENT classinstance.

[0074] Parameters:

[0075] An indicator of an instance of the CONTENT class.

[0076] Return Codes:

[0077] A first code indicates whether the operation was performedsuccessfully.

[0078] A second code indicates whether the media server reported anerror.

[0079] A third code indicates whether the operation failed.

[0080] CLOSE_SESSION

[0081] Closes an open session. All resources allocated to the sessionwill be released.

[0082] Parameters:

[0083] None

[0084] Return Codes:

[0085] A first code indicates that the operation was successfullycompleted.

[0086] A second code indicates that the media server reported an error.

[0087] A third code indicates that an invalid media group was specified.

[0088] A fourth code indicates that the media server cannot be located.

[0089] A fifth code indicates that the operation failed.

[0090] COPY_MEDIA

[0091] Copies a media object from one media server to one or more othermedia servers.

[0092] Due to the length of time that a copy operation may take, theCOPY_MEDIA member function method works asynchronously. That is, it isreturned after initiating the copy operation. The progress of the copyoperation may be determined by calling the GET_MEDIA_STATUS memberfunction. The copy operation may be cancelled by calling the CLOSEmember function.

[0093] Parameters:

[0094] An indicator of a media name.

[0095] An indicator of a byte offset, at which to begin the copyoperation.

[0096] An indicator of a byte offset, at which to end copy operations. Azero value can be specified to indicate the end of the media object.

[0097] An indicator of an array of MEDIA_LOCATION structures. EachMEDIA_LOCATION structure specifies one target location for a particularcopy operation. The MEDIA_LOCATION structure indicates the size of thestructure, the number of users, the media server name, the media groupname, and the media object name.

[0098] A number of locations to which a media object will be copied.

[0099] An indicator of a CONTENT instance pointer.

[0100] Return Codes:

[0101] A first code indicates that the operation was successfullyperformed.

[0102] A second code indicates that the media server reported an error.

[0103] A third code indicates that the media name is invalid.

[0104] A fourth code indicates that an invalid media group (i.e. groupof media objects) has been specified.

[0105] A fifth code indicates that a specified media name cannot befound.

[0106] A sixth code indicates that a copy operation has failed.

[0107] DELETE

[0108] Removes an media object from the media server.

[0109] Parameters:

[0110] An indicator of a media name.

[0111] A condition for deleting the media object. By way of example,this parameter may specify that the media object is to be deleted onlyif all of the resources are inactive.

[0112] Alternatively, this parameter may mark the asset as unavailable,and defer deletion until media object is no longer in use.

[0113] Return Codes:

[0114] A first code indicates that the operation was performedsuccessfully.

[0115] A second code indicates that the media server reported an error.

[0116] A third code indicates that the specified media name was notfound.

[0117] A fourth code indicates that the specified media object is inuse.

[0118] A fifth code indicates that the specified media name is invalid.

[0119] A sixth code indicates that delete operation has failed.

[0120] EVENT_HANDLER

[0121] Conditionally receives control for asynchronous events. An eventmask, set with the REGISTER_CALL_BACK member function, allows specifiedevents to be passed to the EVENT_HANDLER member function.

[0122] Parameters:

[0123] An indicator of an event structure.

[0124] By way of example, the event structure may specify the size ofthe event structure, an event type, a media event, and an error event.The media event structure specifies an indicator of the CONTENT class,an event type, an index into a specific location or file array. Theerror event structure specifies the specific event associated with theoccurrence of an error.

[0125] Events are asynchronous messages sent to the media manager by themedia server.

[0126] Return Codes:

[0127] This member function has no return type.

[0128] GET_EVENT_MASK

[0129] Returns the current event mask.

[0130] Parameters:

[0131] An indicator of an event mask.

[0132] Return Codes

[0133] A first code indicates that the operation was successfullycompleted.

[0134] A second code indicates that the event mask is not defined.

[0135] GET_META_DATA

[0136] Builds and returns a metadata file.

[0137] Parameters:

[0138] An indicator of a media name.

[0139] A value which indicates whether playback should beginautomatically, or delayed until play action.

[0140] A size of user data.

[0141] An indicator of a user defined data value.

[0142] An indicator of a MEDIA_STATUS structure to receive statusinformation. The MEDIA_STATUS structure specifies the size of thestructure, the current length (bytes), the media copy rate, a media openmode, a creation date, the date of the most recent modification, and thedate of the most recent access.

[0143] An indicator of a buffer to receive metadata information.

[0144] The size of buffer.

[0145] Return Codes:

[0146] A first code indicates whether the operation was successfullyperformed.

[0147] A second code indicates that the media server reported an error.

[0148] A third code indicates whether the specified media name isinvalid.

[0149] A fourth code indicates whether the specified media name isvalid.

[0150] A fifth code indicates that a specified media name was not found.

[0151] A sixth code indicates that the operation has failed.

[0152] A seventh code indicates that there is insufficient diskbandwidth for the operation.

[0153] An eighth code indicates that an invalid media group has beenspecified.

[0154] A ninth code indicates that the operation is not available on themedia server specified.

[0155] GET_MEDIA_STATUS

[0156] Obtains the status of a media object.

[0157] Parameters:

[0158] An indicator of a media name.

[0159] An indicator of a MEDIA_STATUS structure which is used to receivestatus information. The MEDIA_STATUS structure specifies the size of thestructure, a current length in bytes of the media object, a media copyrate, a media open mode, the creation date of the media object, the lastmodification date of the media object, and the last access date of themedia object.

[0160] Return Codes:

[0161] A first code indicates whether the operation was successfullycompleted.

[0162] A second code indicates whether the media server reported anerror.

[0163] A third code indicates whether the specified media name isinvalid.

[0164] A fourth code indicates whether the operation has failed.

[0165] INIT_SERVER

[0166] Initializes the Media Manager client library. This memberfunction has to be the first call the application issues beforerequesting other Media Manager services.

[0167] Parameters:

[0168] The maximum number of sessions to be supported by the MediaManager.

[0169] An indicator of a current version.

[0170] Return Codes:

[0171] A first code indicates whether the operation was performedsuccessfully.

[0172] A second code indicates that no more resources are available.

[0173] A third code indicates that the operation has failed.

[0174] LIST_MEDIA_GROUPS

[0175] Obtains a list of configured media group names.

[0176] Parameters:

[0177] An indicator of an array of MEDIA_GROUP_ATTRIBUTES structuresthat will specify the media group name and type. A media group name is avariable-length string. The media group type includes default andcurrent media groups.

[0178] An indicator of the size in bytes of a group array.

[0179] Return Codes:

[0180] A first code indicates that the operation was successfullycompleted.

[0181] A second code indicates that the media server has reported anerror.

[0182] A third code indicates that the media server cannot be located.

[0183] A fourth code indicates that the operation has failed.

[0184] LIST_MEDIA_NAMES

[0185] Obtains a list of media names associated with a media group.

[0186] Parameters:

[0187] An indicator of a media group name.

[0188] An indicator which specifies a buffer of media names. Each medianame in the buffer is a variable length string.

[0189] An indicator of the number of entries returned in the buffer. anindicator of the buffer size.

[0190] An indicator of a position that is the start of a list of medianames.

[0191] Return Codes:

[0192] A first code indicates that the operation was successfullycompleted.

[0193] A second code indicates that the media server has reported anerror.

[0194] A third code indicates that the operation has failed.

[0195] OPEN

[0196] Returns an instance of the CONTENT class that is used insubsequent calls to read or write data from or to a media object.

[0197] Parameters:

[0198] An indicator of a media name.

[0199] A mode of operation which corresponds to a read or write mode ofoperation. There are several options which can be specified along withthis parameter. Namely, an indication can be provided of whether themedia object is provided for exclusive use. An indication can also beprovided that the media object should be created if it does not alreadyexist. An indication can also be provided of whether content should betruncated from the media object. In addition, an indicator can beprovided of the location of the end of the media object. The rate inbits per second that the media object will be read from or written to.

[0200] A location of a pointer to an instance of the CONTENT class.

[0201] Return Codes:

[0202] A first code indicates that the operation was successfullycompleted.

[0203] A second code indicates that the media server has reported anerror.

[0204] A third code indicates that the specified media name was notfound.

[0205] A fourth code indicates that an invalid mode was specified.

[0206] A fifth code indicates that an invalid copy-rate was specified.

[0207] A sixth code indicates that a media object cannot be shared.

[0208] A seventh code indicates that a request for exclusive use isdenied, because a particular media object is in use.

[0209] An eighth code indicates that a media name already exists.

[0210] A ninth code indicates that the operation has failed.

[0211] OPEN_SESSION

[0212] Opens a session from the application to the media server.

[0213] Parameters:

[0214] A host name of a media server with which to establish a session.

[0215] A name of a media group.

[0216] Return Codes:

[0217] A first code indicates that the operation was successfullycompleted.

[0218] A second code indicates that the media server has reported anerror.

[0219] A third code indicates that the operation has failed.

[0220] A fourth code indicates that the media server cannot be located.

[0221] A fifth code indicates that an invalid media group has beenspecified.

[0222] A sixth code indicates that an invalid server name has beenspecified.

[0223] REGISTER_CALL_BACK

[0224] Registers the application event handler with the media manager.Once registered, the application may receive asynchronous eventnotification from the media server when necessary.

[0225] Parameters:

[0226] An event mask (i.e. bit mask) which is used to select whichevents are to be sent to the EVENT_HANDLER method function.

[0227] The event mask is developed using a logical operation involvingthe following event masks. A first event mask indicates a change in thestate of a port. A second event mask indicates a change in the state ofa media object. A third event mask indicates that an error has occurred.A fourth event mask indicates a change in the state of a media stream. Afourth event mask indicates a report of an event.

[0228] Return Codes:

[0229] A first code indicates that the operation was successfullycompleted.

[0230] A second code indicates that the media server has reported anerror.

[0231] A third code indicates that an invalid event type has beenspecified.

[0232] A fourth code indicates that the operation has failed.

[0233] C_SERVER

[0234] Acts as a constructor which creates an instance of the SERVERclass for a specific media server type.

[0235] Parameters:

[0236] A support level to be created within a SERVER class instance.

[0237] Return Codes:

[0238] None

[0239] D_SERVER

[0240] Acts as a destructor with respect to an instance of the SERVERclass.

[0241] Parameters:

[0242] None

[0243] Return Codes:

[0244] None

[0245] UN_REGISTER_CALL_BACK

[0246] Unregisters an application event handler. When the event handleris unregistered, the application will not receive asynchronous eventnotifications.

[0247] Parameters:

[0248] none

[0249] Return Codes:

[0250] A first code indicates that the operation was successfullycompleted.

[0251] A second code indicates that the media server has reported anerror.

[0252] A third code indicates that the session handler is corrupt.

[0253] A fourth code indicates that the operation has failed.

[0254] Content Class Member Functions

[0255] DESTAGE

[0256] Transfers a media object from the media server to the mediaarchive.

[0257] This member function relies on other member functions. Inparticular, the member function calls the DELETE member function todelete a media object from the media archive if it exists, and thencalls the COPY function to deliver the media object to the videoarchive. GET_MEDIA_ATTRIBUTE

[0258] Obtains media attributes of a specified media object.

[0259] Parameters:

[0260] An indicator of a MEDIA_ATTRIBUTES structure. TheMEDIA_ATTRIBUTES structure specifies the size of the structure, the playback rate in frames/sec, the play back rate in bits/sec, the expectednumber of users, the type of the media object, and the duration of themedia object during playback.

[0261] Return Codes:

[0262] A first code indicates whether the operation was successfullycompleted.

[0263] A second code indicates whether the media server reported anerror.

[0264] A third code indicates whether the operation has failed.

[0265] GET_MEDIA_STATUS

[0266] Obtains a status of a media object.

[0267] Parameters:

[0268] An indicator of a MEDIA_STATUS structure to receive statusinformation. The MEDIA_STATUS structure specifies the size of thisstructure, the current length (bytes), the media copy rate, the mediaopen mode, the creation date, the date the media object was lastmodified, the date the media object was last accessed.

[0269] Return Codes:

[0270] A first code indicates whether the operation was successfullycompleted.

[0271] A second code indicates whether the media server reported anerror.

[0272] A third code indicates whether the operation has failed.

[0273] LOAD

[0274] Copies an existing media object from a client to a media Server.The media object must be open in write mode. This member function is anasynchronous function, i.e., it returns after initiating the loadoperation. The progress of this member function can be determined bycalling the GET_MEDIA_STATUS member function. However, the operation maybe cancelled by calling the CLOSE member function.

[0275] Parameters:

[0276] An indicator of a MEDIA_ATTRIBUTES structure. TheMEDIA_ATTRIBUTES structure defines the size of the structure, the typeof the media object, the duration of the media object during playback,the play back rate in frames/sec, the playback rate in bits/sec, theexpected number of users, and the name of the media object.

[0277] A host name from which media object(s) are transferred.

[0278] A user ID of the host specified by the hostname parameter.

[0279] A password of the user ID specified by the user ID parameter.

[0280] A file name array. All the files in the array can be joinedtogether to form a single media object. This allows very large mediaobjects to be created even if a particular media server does not supportvery large files.

[0281] A number of file names in the file name array.

[0282] An indicator of a MEDIA_STATUS structure used to receive statusinformation. The MEDIA_STATUS specifies a size of the structure, thecurrent length (bytes), the media object copy rate, a media object openmode, a creation date of the media object, the date that the mediaobject was last modified, and the date that the media object was lastaccessed.

[0283] Return Codes:

[0284] A first code indicates whether the operation was successfullycompleted.

[0285] A second code indicates whether the media server reported anerror.

[0286] A third code indicated that an invalid media server name has beenspecified.

[0287] A fourth code indicates that an invalid server name has beenspecified.

[0288] A fifth code indicates that the operation has failed.

[0289] A sixth code indicates that there is insufficient space availablein Media Server.

[0290] A seventh code indicates that there is insufficient diskbandwidth in the media server.

[0291] READ

[0292] Reads data of a specified media object. Each successive call tothe member function reads a sequential number of bytes from the currentposition. The media object must be open in read mode in order to callthis member function.

[0293] Parameters:

[0294] An indicator of a pointer to which data is transferred.

[0295] A number of bytes to be read.

[0296] A number of bytes that have actually been read.

[0297] Return Codes:

[0298] A first code indicates whether the operation was successfullycompleted.

[0299] A second code indicates whether the media server reported anerror.

[0300] A third code indicates that the operation has failed.

[0301] RETRIEVE

[0302] Retrieves a media object from the media server. This memberfunction calls other member functions. In particular, the COPY memberfunction is called if a media object is not already stored in the mediaserver. Subsequently, the GET META_DATA member function is called toretrieve metadata information.

[0303] SEEK

[0304] Sets a current byte position within the media object. This memberfunction only works in conjunction with the READ member function. Themedia object must be open in read mode in order for the operation to beinitiated. It has no effect during a write operation.

[0305] Parameters:

[0306] An indicator of how an offset parameter is used. The followingsupport options may also be specified. A first support option sets amedia byte position to the value of the offset parameter. A secondsupport option sets the media byte position to its current position plusthe offset parameter. A third support option sets the media byteposition to the end of the media.

[0307] An indicator of the byte offset into the media object being read.

[0308] Return Codes:

[0309] A first code indicates whether the operation was successfullycompleted.

[0310] A second code indicates whether the media server reported anerror.

[0311] A third code indicates that the operation has failed.

[0312] SET_MEDIA_ATTRIBUTE

[0313] Sets the media attributes of a media object. The media objectmust be opened in write mode to employ this member function.

[0314] Parameters:

[0315] An indicator of a MEDIA_ATTRIBUTES structure. TheMEDIA_ATTRIBUTES structure specifies the size of this structure, anattributes flag, the type of the media object, the duration of the mediaobject, the play back rate in frames/sec, the play back rate inbits/sec, the expected number of users, and the name of the mediaobject.

[0316] The attributes flag is a bit mask built up using a combination ofbasic attribute flags. The basic attribute flags specify which values inthe structure are being set. The basic asset attribute flags set themedia object name, the media object type, the duration of the mediaobject, the media object, frame rate, the media object bit rate, theexpected number of users, and all the attributes of the media object.

[0317] Return Codes:

[0318] A first code indicates whether the operation was successfullycompleted.

[0319] A second code indicates whether the media server reported anerror.

[0320] A third code indicates that the operation has failed.

[0321] WRITE

[0322] Writes data to the media object. Each successive call to thismember function writes a sequential number of bytes. The media must beopen in write mode.

[0323] Parameters:

[0324] An indicator of a pointer from which data is written.

[0325] A number of bytes to be written.

[0326] A number of bytes that have actually been written.

[0327] Return Codes:

[0328] A first code indicates whether the operation was successfullycompleted.

[0329] A second code indicates whether the media server reported anerror.

[0330] A third code indicates that the operation has failed.

What is claimed is:
 1. A media manager which incorporates an applicationprogram interface (API) for converting high-level generic commands intodevice level commands for output to a plurality of media devices, saidmedia manager comprising: a high-level command processor which decodesthe high-level generic commands; and a plurality of device specific codemapping modules which convert the high-level generic commands by saidhigh-level command processor into device level commands, each of thedevice-level commands being output from one of the plurality of devicespecific code mapping modules to a corresponding one of the plurality ofmedia devices.
 2. The media manager defined by claim 1, wherein saidhigh-level command processor includes a plurality of individual APIswhich correspond to the common API, the individual APIs each handling aspecific function.
 3. The media manager defined by claim 1, furthercomprising a device interface which receives each of the device levelcommands output from the plurality of device specific code mappingmodules and outputs each of the device-level commands to a correspondingone of the plurality of media devices.
 4. The media manager defined byclaim 2, wherein said each of said media devices comprises a mediaarchive and at least one media server, each of said media devicesstoring media objects.
 5. The media manager defined by claim 4, whereinsaid media archive and media server are included in a multimedia datastorage system including a digital library.
 6. The media manager definedby claim 4, wherein said individual application program interfacesrepresent member functions associated with classes which define objectsrepresenting media servers and objects representing a logicaldescription of a physical format of a media object.
 7. The media managerdefined by claim 1, wherein said plurality of device-specificcode-mapping modules convert high-level generic commands into specificactions and convert the specific actions into device level commands. 8.A method of implementing an application program interface (API) for aplurality of media devices comprising: receiving a plurality ofhigh-level generic commands from a computer application; converting theplurality of high-level generic commands into device-level commands; andoutputting each of the device level commands to one of the mediadevices.
 9. The method defined by claim 8, wherein said convertingcomprises converting the plurality of high-level generic commands usinga plurality of individual APIs which each perform a specific function.10. The method defined by claim 8, wherein said converting comprisesconverting the plurality of high-level generic commands into specificactions; and converting the specific actions into device-level commands.11. The method defined by claim 8, wherein each one of the high-levelgeneric commands is received along with a media device type identifier;wherein prior to said converting, it is determined whether the mediadevice type corresponds to one of the media devices; and wherein each ofthe device level commands is output to a corresponding one of theplurality of media devices which is of the media device type.
 12. Acomputer program product including a computer-readable medium,comprising: means for decoding high-level generic commands; means forconverting the high-level generic commands into device-level commands;and means for outputting each of the device-level commands to acorresponding media devices.
 13. The computer program product defined byclaim 12, wherein said means for converting converts high-level genericcommands into specific actions and converts said specific actions intothe device-level commands.
 14. A common application program interface(API) which converts high-level generic commands received from acomputer application into device-level commands which are output to aplurality of media devices including media servers which store mediaobjects, said common API comprising a plurality of individual APIs whicheach perform a specific function.
 15. The common application programinterface defined by claim 14, wherein said plurality of individual APIscomprise first and second groups of individual APIs, the first group ofindividual APIs corresponding to a first group of member functionsassociated with a class defining objects which represent media servers,the second group of individual APIs corresponding to a second group ofmember functions associated with a class defining objects whichrepresent a logical description of a physical format of media objects.16. The common application program interface defined by claim 15,wherein the first group of individual APIs comprises a CLOSE API whichcloses an open media object.
 17. The common application programinterface defined by claim 15, wherein the first group of individualAPIs comprises a CLOSE_SESSION API which closes an open session.
 18. Thecommon application program interface defined by claim 15, wherein thefirst group of individual APIs comprises a COPY_MEDIA API which copies amedia object from one of the media servers to another one of the mediaservers.
 19. The common application program interface defined by claim15, wherein the first group of individual APIs comprises a DELETE APIwhich removes a media object from one of the plurality of media servers.20. The common application program interface defined by claim 15,wherein the first group of individual APIs comprises an EVENT_HANDLERAPI which conditionally receives control for handling asynchronousevents.
 21. The common application program interface defined by claim15, wherein the first group of individual APIs comprises an EVENT_MASKAPI which returns a current event mask.
 22. The common applicationprogram interface defined by claim 15, wherein the first group ofindividual APIs comprises a GET_META_DATA API which builds and return ameta data file.
 23. The common application program interface defined byclaim 15, wherein the first group of individual APIs comprises aGET_MEDIA_STATUS API which obtains a status of a media object.
 24. Thecommon application program interface defined by claim 15, wherein thefirst group of individual APIs comprises an INIT_SERVER API whichinitializes a client library of a media manager containing the commonAPI.
 25. The common application program interface defined by claim 15,wherein the first group of individual APIs comprises a LIST_MEDIA_GROUPSAPI which obtains a list of names corresponding to configured groups ofmedia objects.
 26. The common application program interface defined byclaim 15, wherein the first group of individual APIs comprises aLIST_MEDIA_NAMES API which obtains a list of the names of media objectsassociated with a particular media group of media objects.
 27. Thecommon application program interface defined by claim 15, wherein thefirst group of individual APIs comprises an OPEN API which returns aninstance of the second class which is then used to read or write datafrom or to a media object, respectively.
 28. The common applicationprogram interface defined by claim 15, wherein the first group ofindividual APIs comprises an OPEN_SESSION API which opens a session toone of the media servers.
 29. The common application program interfacedefined by claim 20, wherein the first group of individual APIscomprises a REGISTER_CALL_BACK API which registers the EVENT_HANDLER APIwith a media manager which corresponds to the common application programinterface.
 30. The common application program interface defined by claim15, wherein the first group of individual APIs comprises a C_SERVER APIwhich is a constructor used to create an instance of the first class fora type of media server corresponding to at least one of the mediaservers.
 31. The common application program interface defined by claim15, wherein the first group of individual APIs comprises a D_SERVER APIwhich is a default destructor used to destroy an instance of the firstclass for a specific server type of media server corresponding to atleast one of the media servers.
 32. The common application programinterface defined by claim 20, wherein the first group of individualAPIs comprises an UN_REGISTER_CALL_BACK API which un-registers anapplication event handler.
 33. The common application program interfacedefined by claim 15, wherein the second group of individual APIscomprises a DESTAGE API which transfers a media object from one of themedia servers to a media archive.
 34. The common application programinterface defined by claim 15, wherein the second group of individualAPIs comprises a GET_MEDIA_ATTRIBUTE API which obtains media attributesof a media object.
 35. The common application program interface definedby claim 15, wherein the second group of individual APIs comprises aGET_MEDIA_STATUS API which obtains the status of a media object.
 36. Thecommon application program interface defined by claim 15, wherein thesecond group of individual APIs comprises a LOAD API which copies anexisting media object to a media device.
 37. The common applicationprogram interface defined by claim 15, wherein the second group ofindividual APIs comprises a READ API which reads data of a media object.38. The common application program interface defined by claim 15,wherein the second group of individual APIs comprises a RETRIEVE APIwhich retrieves a media object from one of the media servers.
 39. Thecommon application program interface defined by claim 15, wherein thesecond group of individual APIs comprises a SEEK API which sets acurrent byte position within a media object.
 40. The common applicationprogram interface defined by claim 15, wherein the second group ofindividual APIs comprises a SET_MEDIA_ATTRIBUTES API which sets mediaattributes of a media object.
 41. The common application programinterface defined by claim 15, wherein the second group of individualAPIs comprises a WRITE API which writes data to a media object.